home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1997 #3
/
Amiga Plus CD - 1997 - No. 03.iso
/
pd
/
programmierung
/
alienbreed3d2_src
/
cheesesauce
/
controlloopcd32.s
< prev
next >
Wrap
Text File
|
1997-01-31
|
42KB
|
2,132 lines
; Main control loop.
; This is the very outer loop of the program.
; What needs to be done and when?
; Black screen start.
; Load title music
; Load title screen
; Fade up title screen
; Select options
; Play game.
; Playing the game involves allocating screen and
; level memory, loading the level, loading the
; samples, loading the wall graphics, playing the
; level, deallocating the screen memory....
; Control part should therefore:
; 1. Load Title Music
; 2. Load title screen
; 3. Fade up title screen.
; 4. Add 'loading' message
; 5. Load samples and walls
; 6: LOOP START
; 7. Option select screens
; 8. Free music mem, allocate level mem.
; 9. Load level
;10. Play level with options selected
;11. Reload title music
;12. Reload title screen
;13. goto 6
INTROTUNEADDR: dc.l 0
INTROTUNENAME: dc.b 'ab3:sounds/abreed3d.med',0
even
TITLESCRNADDR: dc.l 0
TITLESCRNNAME: dc.b 'ab3:includes/titlescrnraw',0
even
OPTSPRADDR: dc.l 0
KVALTOASC:
Dc.b " ` "," 1 "," 2 "," 3 "
dc.b " 4 "," 5 "," 6 "," 7 "
dc.b " 8 "," 9 "
Dc.b " 0 "," - "," + "," \ "
dc.b ' ',' '," Q "," W "
dc.b " E "," R "
Dc.b " T "," Y "," U "," I "
dc.b " O "," P "," [ "," ] "
dc.b ' ','KP1 '
Dc.b 'KP2 ','KP3 '," A "," S "
dc.b " D "," F "," G "," H "
dc.b " J "," K "
Dc.b " L "," ; "," # ",' '
dc.b ' ','KP4 ','KP5 ','KP6 '
dc.b ' '," Z "
Dc.b " X "," C "," V "," B "
dc.b " N "," M "," , "," . "
dc.b " / ",' '
Dc.b ' ','KP7 ','KP8 ','KP9 '
dc.b 'SPC ','<-- ','TAB ','ENT '
dc.b 'RTN ','ESC '
Dc.b 'DEL ',' ',' ',' '
dc.b 'KP- ',' ','UCK ','DCK '
dc.b 'RCK ','LCK '
Dc.b 'FK1 ','FK2 ','FK3 ','FK4 '
dc.b 'FK5 ','FK6 ','FK7 ','FK8 '
dc.b 'FK9 ','FK0 '
Dc.b 'KP( ','KP) ','KP/ ','KP* '
dc.b 'KP+ '
dc.b 'HLP ','LSH ','RSH '
dc.b 'CPL ','CTL '
Dc.b 'LAL ','RAL ','LAM ','RAM '
dc.b ' ',' ',' ',' '
dc.b ' ',' '
Dc.b ' ',' ',' ',' '
dc.b ' ',' ',' ',' '
dc.b ' ',' '
even
FINISHEDLEVEL: dc.w 0
START:
************************************88
* TAKE OUT WHEN PLAYING MODULE AGAIN
********************************
PRSDF
PRSDE
************************************
; move.l #PROTCALLENC,a0
; move.l #(ENDPROT-PROTCALLENC)/4-1,d1
; move.l #$75055345,d0
;codeitup:
; sub.l d0,(a0)+
; ror.l #1,d0
; dbra d1,codeitup
;
; rts
PRSDA
move.w #$7201,titleplanes
move.l 4.w,a6
move.l #doslibname,a1
moveq #0,d0
jsr -552(a6)
move.l d0,doslib
PRSDS
jsr stuff
jsr _InitLowLevel
jsr CLEARTITLEPAL
PRSDT
move.w #$20,$dff1dc
move.l #titlecop,$dff080
PRSDV
move.w #$87c0,$dff000+dmacon
move.w #$8020,$dff000+dmacon
move.w $dff006,d0
add.w d0,RVAL2
bsr GETTITLEMEM
PRSDU
bsr CLROPTSCRN
bsr SETUPTITLESCRN
; jsr _InitPlayer
; move.l #INTROTUNENAME,a0
; jsr _LoadModule
; move.l d0,INTROTUNEADDR
PRSDY
; move.l d0,a0
; jsr _InitModule
; move.l INTROTUNEADDR,a0
; jsr _PlayModule
PRSDa
bsr LOADTITLESCRN
move.w #0,FADEVAL
move.w #63,FADEAMOUNT
bsr FADEUPTITLE
PRSDB
jsr LOAD_SFX
jsr LOADFLOOR
jsr LOADOBS
PRSDZ
move.w #31,FADEAMOUNT
PRSDC
bsr FADEDOWNTITLE
; bsr ASKFORDISK
jsr LOADWALLS
; jsr _StopPlayer
PRSDW
PRSDX
; jsr _RemPlayer
move.l #newblag,$80
trap #0
rts
newblag:
; bsr PROTSETUP
move.l INTROTUNEADDR,a0
; jsr _UnLoadModule
jsr KInt_Init
bsr DEFAULTGAME
BACKTOMENU:
bsr READMAINMENU
bsr WAITREL
move.l OLDKINT,$68.w
xxxxxxxxxxxx
bsr CLRSPRITES
move.w #31,FADEAMOUNT
bsr FADEUPTITLE
move.w #63,FADEAMOUNT
bsr FADEDOWNTITLE
move.w #$0201,titleplanes
bsr RELEASETITLEMEM
bsr SETPLAYERS
clr.b FINISHEDLEVEL
bsr LOADBOTPIC
move.w #0,PLR1_angpos
move.w #0,PLR2_angpos
move.b #0,PLR1_GunSelected
move.b #0,PLR2_GunSelected
jsr PLAYTHEGAME
bsr FREEBOTMEM
; bra QUITTT
tst.b FINISHEDLEVEL
beq dontusestats
bsr CALCPASSWORD
dontusestats:
bsr PASSLINETOGAME
bsr GETSTATS
bsr GETTITLEMEM
bsr CLROPTSCRN
bsr SETUPTITLESCRN
bsr LOADTITLESCRN
move.w #$7201,titleplanes
move.w #$20,$dff1dc
move.l #titlecop,$dff080
move.w #$87c0,$dff000+dmacon
move.w #$8020,$dff000+dmacon
move.w #0,FADEVAL
move.w #63,FADEAMOUNT
bsr FADEUPTITLE
move.w #31,FADEAMOUNT
bsr FADEDOWNTITLE
jsr KInt_Init
bra BACKTOMENU
QUITTT:
jsr RELEASEWALLMEM
jsr RELEASESAMPMEM
jsr RELEASEFLOORMEM
jsr RELEASEOBJMEM
rte
; KEY OPTIONS:
CONTROLBUFFER:
turn_left_key:
dc.b $4f
turn_right_key:
dc.b $4e
forward_key:
dc.b $4c
backward_key:
dc.b $4d
fire_key:
dc.b $65
operate_key:
dc.b $40
run_key:
dc.b $61
force_sidestep_key:
dc.b $67
sidestep_left_key:
dc.b $39
sidestep_right_key:
dc.b $3a
duck_key:
dc.b $22
look_behind_key:
dc.b $28
templeftkey: dc.b 0
temprightkey: dc.b 0
tempslkey: dc.b 0
tempsrkey: dc.b 0
even
GETSTATS:
; CHANGE PASSWORD INTO RAW DATA
move.b PASSBUFFER,d0
and.w #$7f,d0
move.w d0,PLR1_energy
move.b PASSBUFFER+1,d0
btst #7,d0
sne PLR1_GunData+32+7
btst #6,d0
sne PLR1_GunData+32*2+7
btst #5,d0
sne PLR1_GunData+32*4+7
btst #4,d0
sne PLR1_GunData+32*7+7
and.w #%1111,d0
move.w d0,MAXLEVEL
move.b PASSBUFFER+2,d0
and.w #$7f,d0
lsl.w #3,d0
move.w d0,PLR1_GunData
move.b PASSBUFFER+3,d0
and.w #$7f,d0
lsl.w #3,d0
move.w d0,PLR1_GunData+32
move.b PASSBUFFER+4,d0
and.w #$7f,d0
lsl.w #3,d0
move.w d0,PLR1_GunData+32*2
move.b PASSBUFFER+5,d0
and.w #$7f,d0
lsl.w #3,d0
move.w d0,PLR1_GunData+32*4
move.b PASSBUFFER+6,d0
and.w #$7f,d0
lsl.w #3,d0
move.w d0,PLR1_GunData+32*7
rts
SETPLAYERS:
move.w PLOPT,d0
add.b #'a',d0
move.b d0,LEVA
move.b d0,LEVB
move.b d0,LEVC
cmp.b #'s',mors
beq SLAVESETUP
cmp.b #'m',mors
beq MASTERSETUP
st NASTY
onepla:
rts
NASTY: dc.w 0
MASTERSETUP:
bsr TWOPLAYER
clr.b NASTY
move.w PLOPT,d0
jsr SENDFIRST
rts
SLAVESETUP:
bsr TWOPLAYER
CLR.B NASTY
jsr RECFIRST
move.w d0,PLOPT
add.b #'a',d0
move.b d0,LEVA
move.b d0,LEVB
move.b d0,LEVC
rts
********************************************************
ASKFORDISK:
PRSDD
move.w #3,OptScrn
bsr DRAWOPTSCRN
.wtrel:
btst #7,$bfe001
beq.s .wtrel
wtclick:
add.w #$235,RVAL1
btst #6,$bfe001
bne.s wtclick
rts
CLRSPRITES:
move.l #nullspr,d0
move.w d0,tsp0l
move.w d0,tsp1l
move.w d0,tsp2l
move.w d0,tsp3l
move.w d0,tsp4l
move.w d0,tsp5l
move.w d0,tsp6l
move.w d0,tsp7l
swap d0
move.w d0,tsp0h
move.w d0,tsp1h
move.w d0,tsp2h
move.w d0,tsp3h
move.w d0,tsp4h
move.w d0,tsp5h
move.w d0,tsp6h
move.w d0,tsp7h
rts
********************************************************
READMAINMENU:
move.b #'n',mors
move.w MAXLEVEL,d0
move.l #CURRENTLEVELLINE,a1
muls #40,d0
move.l #LEVEL_OPTS,a0
add.l d0,a0
bsr PUTINLINE
; Stay here until 'play game' is selected.
move.w #0,OptScrn
bsr DRAWOPTSCRN
move.w #0,OPTNUM
bsr HIGHLIGHT
bsr WAITREL
.rdlop:
bsr CHECKMENU
tst.w d0
blt.s .rdlop
bne .noopt
bra MASTERMENU
.noopt:
cmp.w #1,d0
beq playgame
cmp.w #2,d0
bne .nocontrol
bsr CHANGECONTROLS
move.w #0,OptScrn
bsr DRAWOPTSCRN
move.w #0,OPTNUM
bsr HIGHLIGHT
bsr WAITREL
bra .rdlop
.nocontrol:
cmp.w #3,d0
bne .nocred
; bsr VIEWCREDS
move.w #0,OptScrn
bsr DRAWOPTSCRN
move.w #0,OPTNUM
bsr HIGHLIGHT
bsr WAITREL
bra .rdlop
.nocred:
cmp.w #4,d0
bne playgame
bsr WAITREL
move.l #PASSWORDLINE+12,a0
moveq #15,d2
.clrline:
move.b #32,(a0)+
dbra d2,.clrline
move.w #0,OptScrn
bsr DRAWOPTSCRN
clr.b lastpressed
move.l #PASSWORDLINE+12,a0
move.w #0,d1
.ENTERPASS:
tst.b lastpressed
beq .ENTERPASS
move.b lastpressed,d2
move.b #0,lastpressed
move.l #KVALTOASC,a1
cmp.l #'<-- ',(a1,d2.w*4)
bne .nodel
tst.b d1
beq .nodel
subq #1,d1
move.b #32,-(a0)
bsr JUSTDRAWIT
bra .ENTERPASS
.nodel:
cmp.l #'RTN ',(a1,d2.w*4)
beq .FORGETIT
cmp.l #'ESC ',(a1,d2.w*4)
beq .FORGETIT
move.b 1(a1,d2.w*4),d2
cmp.b #65,d2
blt .ENTERPASS
cmp.b #'Z',d2
bgt .ENTERPASS
move.b d2,(a0)+
move.w #0,OptScrn
movem.l d0-d7/a0-a6,-(a7)
bsr JUSTDRAWIT
movem.l (a7)+,d0-d7/a0-a6
add.w #1,d1
cmp.w #16,d1
blt .ENTERPASS
bsr PASSLINETOGAME
tst.w d0
bne .FORGETIT
bsr GETSTATS
move.w MAXLEVEL,d0
move.l #CURRENTLEVELLINE,a1
muls #40,d0
move.l #LEVEL_OPTS,a0
add.l d0,a0
bsr PUTINLINE
.FORGETIT:
bsr WAITREL
bsr CALCPASSWORD
move.w #0,OptScrn
bsr DRAWOPTSCRN
move.w #0,OPTNUM
bsr HIGHLIGHT
bra .rdlop
playgame:
move.w MAXLEVEL,PLOPT
rts
LEVELSELECTED:
dc.w 0
MASTERMENU:
move.b #'m',mors
move.w #0,LEVELSELECTED
move.w #0,d0
move.l #CURRENTLEVELLINEM,a1
muls #40,d0
move.l #LEVEL_OPTS,a0
add.l d0,a0
bsr PUTINLINE
; Stay here until 'play game' is selected.
move.w #4,OptScrn
bsr DRAWOPTSCRN
move.w #0,OPTNUM
bsr HIGHLIGHT
bsr WAITREL
.rdlop:
bsr CHECKMENU
tst.w d0
blt.s .rdlop
bsr WAITREL
cmp.w #1,d0
bne.s .nonextlev
move.w LEVELSELECTED,d0
add.w #1,d0
cmp.w MAXLEVEL,d0
blt .nowrap
moveq #0,d0
.nowrap:
move.w d0,LEVELSELECTED
move.l #CURRENTLEVELLINEM,a1
muls #40,d0
move.l #LEVEL_OPTS,a0
add.l d0,a0
bsr PUTINLINE
bsr JUSTDRAWIT
bra .rdlop
.nonextlev:
cmp.w #2,d0
beq .playgame
cmp.w #0,d0
bne .noopt
bra SLAVEMENU
.noopt:
cmp.w #3,d0
bne .nocontrol
bsr CHANGECONTROLS
move.w #4,OptScrn
bsr DRAWOPTSCRN
move.w #0,OPTNUM
bsr HIGHLIGHT
bsr WAITREL
bra .rdlop
.nocontrol:
.playgame
move.w LEVELSELECTED,PLOPT
rts
SLAVEMENU:
move.b #'s',mors
; Stay here until 'play game' is selected.
move.w #5,OptScrn
bsr DRAWOPTSCRN
move.w #0,OPTNUM
bsr HIGHLIGHT
bsr WAITREL
.rdlop:
bsr CHECKMENU
tst.w d0
blt.s .rdlop
bsr WAITREL
cmp.w #1,d0
beq playgame
cmp.w #0,d0
bne .noopt
bra READMAINMENU
.noopt:
cmp.w #2,d0
bne .nocontrol
bsr CHANGECONTROLS
move.w #0,OptScrn
bsr DRAWOPTSCRN
move.w #0,OPTNUM
bsr HIGHLIGHT
bsr WAITREL
bra .rdlop
.nocontrol:
rts
TWOPLAYER
move.w #0,OldEnergy
move.w #127,Energy
jsr EnergyBar
move.w #63,OldAmmo
move.w #0,Ammo
jsr AmmoBar
move.w #0,OldAmmo
move.w #127,PLR1_energy
move.w #127,PLR2_energy
move.w #160,PLR1_GunData ; 10 shots pistol
st PLR1_GunData+7
st.b PLR1_GunData+32+7
move.w #80*4,PLR1_GunData+32
st.b PLR1_GunData+64+7
move.w #80*4,PLR1_GunData+64
st.b PLR1_GunData+32*3+7
move.w #80*4,PLR1_GunData+32*3
st.b PLR1_GunData+32*4+7
move.w #80*4,PLR1_GunData+32*4
st.b PLR1_GunData+32*7+7
move.w #80*4,PLR1_GunData+32*7
move.b #0,PLR1_GunSelected
move.w #160,PLR2_GunData ; 10 shots pistol
st PLR2_GunData+7
st.b PLR2_GunData+32+7
move.w #80*4,PLR2_GunData+32
st.b PLR2_GunData+64+7
move.w #80*4,PLR2_GunData+64
st.b PLR2_GunData+32*3+7
move.w #80*4,PLR2_GunData+32*3
st.b PLR2_GunData+32*4+7
move.w #80*4,PLR2_GunData+32*4
st.b PLR2_GunData+32*7+7
move.w #80*4,PLR2_GunData+32*7
move.b #0,PLR2_GunSelected
newdum:
rts
DEFAULTGAME:
move.w #0,MAXLEVEL
move.w #0,OldEnergy
move.w #127,Energy
jsr EnergyBar
move.w #63,OldAmmo
move.w #0,Ammo
jsr AmmoBar
move.w #0,OldAmmo
move.w #127,PLR1_energy
move.w #127,PLR2_energy
move.w #160,PLR1_GunData ; 10 shots pistol
st PLR1_GunData+7
clr.b PLR1_GunData+32+7
clr.w PLR1_GunData+32
clr.b PLR1_GunData+64+7
clr.w PLR1_GunData+64
clr.b PLR1_GunData+32*3+7
clr.w PLR1_GunData+32*3
clr.b PLR1_GunData+32*4+7
clr.w PLR1_GunData+32*4
clr.b PLR1_GunData+32*7+7
clr.w PLR1_GunData+32*7
move.b #0,PLR1_GunSelected
; move.l #RealTable-2000,a3
; move.l #PROTCALC-5000,a1
; move.l #ASKFORPROT-10000,a2
; move.l #PROTCALLENC-800,a4
; adda.w #800,a4
; jsr (a4)
************************************************
* TEMPORARY MEASURE: REMOVE BEFORE RELEASE *****
************************************************
; tst.w protA
; bne.s .noreset
; move.l #0,a7
;.noreset:
************************************************
move.w #160,PLR2_GunData ; 10 shots pistol
st PLR2_GunData+7
clr.b PLR2_GunData+32+7
clr.w PLR2_GunData+32
clr.b PLR2_GunData+64+7
clr.w PLR2_GunData+64
clr.b PLR2_GunData+32*3+7
clr.w PLR2_GunData+32*3
clr.b PLR2_GunData+32*4+7
clr.w PLR2_GunData+32*4
clr.b PLR2_GunData+32*7+7
clr.w PLR2_GunData+32*7
move.b #0,PLR2_GunSelected
bsr CALCPASSWORD
rts
GETPARITY:
move.w #6,d3
.calcparity:
btst d3,d0
beq.s .nochange
bchg #7,d0
.nochange:
dbra d3,.calcparity
rts
CHECKPARITY:
move.w #6,d3
move.b #$0,d2
.calcparity:
btst d3,d0
beq.s .nochange
bchg #7,d2
.nochange:
dbra d3,.calcparity
move.b d0,d1
and.b #$80,d1
eor.b d1,d2
sne.s d5
rts
CALCPASSWORD:
move.b PLR1_energy+1,d0
bsr GETPARITY
move.b d0,PASSBUFFER
moveq #0,d0
tst.b PLR1_GunData+32+7
sne d0
lsl.w #1,d0
tst.b PLR1_GunData+64+7
sne d0
lsl.w #1,d0
tst.b PLR1_GunData+32*4+7
sne d0
lsl.w #1,d0
tst.b PLR1_GunData+32*7+7
sne d0
lsr.w #3,d0
and.b #%11110000,d0
or.b MAXLEVEL+1,d0
move.b d0,PASSBUFFER+1
eor.b #%10110101,d0
neg.b d0
add.b #50,d0
move.b d0,PASSBUFFER+7
move.w PLR1_GunData,d0
lsr.w #3,d0
bsr GETPARITY
move.b d0,PASSBUFFER+2
move.w PLR1_GunData+32,d0
lsr.w #3,d0
bsr GETPARITY
move.b d0,PASSBUFFER+3
move.w PLR1_GunData+32*2,d0
lsr.w #3,d0
bsr GETPARITY
move.b d0,PASSBUFFER+4
move.w PLR1_GunData+32*4,d0
lsr.w #3,d0
bsr GETPARITY
move.b d0,PASSBUFFER+5
move.w PLR1_GunData+32*7,d0
lsr.w #3,d0
bsr GETPARITY
move.b d0,PASSBUFFER+6
move.w #3,d0
move.l #PASSBUFFER,a0
move.l #PASSBUFFER+8,a1
move.l #PASS,a2
moveq #0,d4
mixemup:
move.b (a0)+,d1
move.b -(a1),d2
not.b d2
moveq #0,d3
lsr.b #1,d1
addx.w d3,d3
lsr.b #1,d2
addx.w d3,d3
lsr.b #1,d1
addx.w d3,d3
lsr.b #1,d2
addx.w d3,d3
lsr.b #1,d1
addx.w d3,d3
lsr.b #1,d2
addx.w d3,d3
lsr.b #1,d1
addx.w d3,d3
lsr.b #1,d2
addx.w d3,d3
lsr.b #1,d1
addx.w d3,d3
lsr.b #1,d2
addx.w d3,d3
lsr.b #1,d1
addx.w d3,d3
lsr.b #1,d2
addx.w d3,d3
lsr.b #1,d1
addx.w d3,d3
lsr.b #1,d2
addx.w d3,d3
lsr.b #1,d1
addx.w d3,d3
lsr.b #1,d2
addx.w d3,d3
move.w d3,(a2)+
dbra d0,mixemup
move.l #PASSWORDLINE+12,a0
move.l #PASS,a1
move.w #7,d0
putinpassline:
move.b (a1),d1
and.b #%1111,d1
add.b #65,d1
move.b d1,(a0)+
move.b (a1)+,d1
lsr.b #4,d1
and.b #%1111,d1
add.b #65,d1
move.b d1,(a0)+
dbra d0,putinpassline
rts
PASSLINETOGAME:
move.l #PASSWORDLINE+12,a0
move.l #PASS,a1
move.w #7,d0
getbuff:
move.b (a0)+,d1
move.b (a0)+,d2
sub.b #65,d1
sub.b #65,d2
and.b #%1111,d1
and.b #%1111,d2
lsl.b #4,d2
or.b d2,d1
move.b d1,(a1)+
dbra d0,getbuff
move.l #PASS,a0
move.l #PASSBUFFER,a1
move.l #PASSBUFFER+8,a2
move.w #3,d0
moveq #0,d4
unmix:
move.w (a0)+,d1
moveq #0,d2
moveq #0,d3
lsr.w #1,d1
addx.w d3,d3
lsr.w #1,d1
addx.w d2,d2
lsr.w #1,d1
addx.w d3,d3
lsr.w #1,d1
addx.w d2,d2
lsr.w #1,d1
addx.w d3,d3
lsr.w #1,d1
addx.w d2,d2
lsr.w #1,d1
addx.w d3,d3
lsr.w #1,d1
addx.w d2,d2
lsr.w #1,d1
addx.w d3,d3
lsr.w #1,d1
addx.w d2,d2
lsr.w #1,d1
addx.w d3,d3
lsr.w #1,d1
addx.w d2,d2
lsr.w #1,d1
addx.w d3,d3
lsr.w #1,d1
addx.w d2,d2
lsr.w #1,d1
addx.w d3,d3
lsr.w #1,d1
addx.w d2,d2
not.b d3
move.b d3,-(a2)
move.b d2,(a1)+
dbra d0,unmix
move.b PASSBUFFER,d0
bsr CHECKPARITY
tst.b d5
bne illega
move.b PASSBUFFER+2,d0
bsr CHECKPARITY
tst.b d5
bne illega
move.b PASSBUFFER+3,d0
bsr CHECKPARITY
tst.b d5
bne illega
move.b PASSBUFFER+4,d0
bsr CHECKPARITY
tst.b d5
bne illega
move.b PASSBUFFER+5,d0
bsr CHECKPARITY
tst.b d5
bne illega
move.b PASSBUFFER+6,d0
bsr CHECKPARITY
tst.b d5
bne illega
move.b PASSBUFFER+1,d0
eor.b #%10110101,d0
neg.b d0
add.b #50,d0
cmp.b PASSBUFFER+7,d0
bne illega
move.w #0,d0
rts
illega:
move.w #-1,d0
rts
PASSBUFFER:
ds.b 8
CHECKBUFFER: ds.b 8
PASS:
ds.b 16
**************************************************
CHANGECONTROLS:
move.w #6,OptScrn
bsr DRAWOPTSCRN
move.w #0,OPTNUM
bsr HIGHLIGHT
bsr WAITREL
.rdlop:
bsr CHECKMENU
tst.w d0
blt.s .rdlop
cmp.w #12,d0
beq .backtomain
move.l #KEY_LINES,a0
move.w d0,d1
muls #40,d1
add.l d1,a0
add.w #32,a0
move.l #$20202020,(a0)
movem.l d0/a0,-(a7)
bsr JUSTDRAWIT
movem.l (a7)+,d0/a0
clr.b lastpressed
.wtkey
tst.b lastpressed
beq .wtkey
move.l #CONTROLBUFFER,a1
moveq #0,d1
move.b lastpressed,d1
move.b d1,(a1,d0.w)
move.l #KVALTOASC,a1
move.l (a1,d1.w*4),(a0)
bsr JUSTDRAWIT
bsr WAITREL
bra .rdlop
.backtomain:
rts
**************************************************
MAXLEVEL: dc.w 0
SHOWCREDITS:
move.w #2,OptScrn
bsr DRAWOPTSCRN
move.w #0,OPTNUM
bsr HIGHLIGHT
bsr WAITREL
.rdlop:
bsr CHECKMENU
tst.w d0
blt.s .rdlop
bra READMAINMENU
HELDDOWN:
dc.w 0
WAITREL:
move.l #KeyMap,a5
WAITREL2:
btst #7,$bfe001
beq.s WAITREL2
tst.b $40(a5)
bne.s WAITREL2
tst.b $44(a5)
bne.s WAITREL2
tst.b $4c(a5)
bne.s WAITREL2
tst.b $4d(a5)
bne.s WAITREL2
rts
PUTINLINE:
moveq #39,d0
pill
move.b (a0)+,(a1)+
dbra d0,pill
rts
CHECKMENU:
btst #1,$dff00c
sne d0
btst #1,$dff00d
sne d1
btst #0,$dff00c
sne d2
btst #0,$dff00d
sne d3
eor.b d0,d2
eor.b d1,d3
move.l #KeyMap,a5
move.b $4c(a5),d0
move.b $4d(a5),d1
or.b d1,d3
or.b d0,d2
move.w OptScrn,d0
move.l #MENUDATA,a0
move.l 4(a0,d0.w*8),a0 ; opt data
move.w OPTNUM,d0
tst.b d2
beq.s NOPREV
tst.b HELDDOWN
bne NOPREV
sub.w #1,d0
bge.s NOPREV
move.w #0,d0
NOPREV:
tst.b d3
beq.s NONEXT
tst.b HELDDOWN
bne NONEXT
add.w #1,d0
tst.w (a0,d0.w*8)
bge.s NONEXT
subq #1,d0
NONEXT:
or.b d2,d3
move.b d3,HELDDOWN
cmp.w OPTNUM,d0
beq.s .nochange
bsr HIGHLIGHT
move.w d0,OPTNUM
bsr HIGHLIGHT
.nochange:
move.w #-1,d0
btst #7,$bfe001
beq.s select
move.b $40(a5),d1
or.b $44(a5),d1
tst.b d1
beq.s noselect
select:
move.w OPTNUM,d0
noselect:
rts
HIGHLIGHT:
SAVEREGS
move.w OptScrn,d0
move.l #MENUDATA,a0
move.l 4(a0,d0.w*8),a0
move.w OPTNUM,d0
lea (a0,d0.w*8),a0
move.w (a0)+,d0 ;left
move.w (a0)+,d1 ;top
move.w (a0)+,d2 ;width
muls #16*8,d1
move.l OPTSPRADDR,a1
add.w d1,a1
add.w #8+16,a1
move.l #SCRTOSPR2,a5
adda.w d0,a5
adda.w d0,a5
NOTLOP:
move.w (a5)+,d3
lea (a1,d3.w),a2
not.b (a2)
not.b 16(a2)
not.b 32(a2)
not.b 48(a2)
not.b 64(a2)
not.b 80(a2)
not.b 96(a2)
not.b 112(a2)
not.b 128(a2)
subq #1,d2
bgt.s NOTLOP
GETREGS
rts
SCRTOSPR2:
val SET 0
REPT 6
dc.w val+0
dc.w val+1
dc.w val+2
dc.w val+3
dc.w val+4
dc.w val+5
dc.w val+6
dc.w val+7
val SET val+258*16
ENDR
CLROPTSCRN:
move.l #$2cdfea,d0
move.w (a4,d0.l),d0
add.w d0,RVAL2
move.l OPTSPRADDR,a0
lea 16(a0),a1
lea 16+(258*16)(a0),a2
lea 16+(258*16*2)(a0),a3
lea 16+(258*16*3)(a0),a4
lea 258*16(a4),a0
move.w #256,d0
moveq #0,d1
CLRLOP:
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a0)+
move.l d1,(a1)+
move.l d1,(a1)+
move.l d1,(a1)+
move.l d1,(a1)+
move.l d1,(a2)+
move.l d1,(a2)+
move.l d1,(a2)+
move.l d1,(a2)+
move.l d1,(a3)+
move.l d1,(a3)+
move.l d1,(a3)+
move.l d1,(a3)+
move.l d1,(a4)+
move.l d1,(a4)+
move.l d1,(a4)+
move.l d1,(a4)+
dbra d0,CLRLOP
move.l OPTSPRADDR,a0
move.w #44*256+64,(a0)
move.w #44*256+2,8(a0)
add.l #258*16,a0
move.w #44*256+96,(a0)
move.w #44*256+2,8(a0)
add.l #258*16,a0
move.w #44*256+128,(a0)
move.w #44*256+2,8(a0)
add.l #258*16,a0
move.w #44*256+160,(a0)
move.w #44*256+2,8(a0)
add.l #258*16,a0
move.w #44*256+192,(a0)
move.w #44*256+2,8(a0)
rts
DRAWOPTSCRN:
bsr CLROPTSCRN
JUSTDRAWIT:
move.l #font,a0
move.l #MENUDATA,a1
move.w OptScrn,d0
move.l (a1,d0.w*8),a1
move.l OPTSPRADDR,a3
add.l #16,a3
moveq #0,d2
move.w #31,d0
linelop:
move.w #39,d1
move.l #SCRTOSPR,a4
move.l a3,a2
charlop:
move.b (a1)+,d2
lea (a0,d2.w*8),a5
move.b (a5)+,(a2)
move.b (a5)+,16(a2)
move.b (a5)+,32(a2)
move.b (a5)+,48(a2)
move.b (a5)+,64(a2)
move.b (a5)+,80(a2)
move.b (a5)+,96(a2)
move.b (a5),112(a2)
add.w (a4)+,a2
dbra d1,charlop
add.w #16*8,a3
dbra d0,linelop
rts
SCRTOSPR:
dc.w 1,1,1,1,1,1,1,258*16-7
dc.w 1,1,1,1,1,1,1,258*16-7
dc.w 1,1,1,1,1,1,1,258*16-7
dc.w 1,1,1,1,1,1,1,258*16-7
dc.w 1,1,1,1,1,1,1,258*16-7
dc.w 1,1,1,1,1,1,1,258*16-7
OPTNUM: dc.w 0
OptScrn: dc.w 0
MENUDATA:
;0
dc.l ONEPLAYERMENU_TXT
dc.l ONEPLAYERMENU_OPTS
;1
dc.l INSTRUCTIONS_TXT
dc.l INSTRUCTIONS_OPTS
;2
dc.l CREDITMENU_TXT
dc.l CREDITMENU_OPTS
;3
dc.l ASKFORDISK_TXT
dc.l ASKFORDISK_OPTS
;4
; dc.l ONEPLAYERMENU_TXT
; dc.l ONEPLAYERMENU_OPTS
dc.l MASTERPLAYERMENU_TXT
dc.l MASTERPLAYERMENU_OPTS
;5
dc.l SLAVEPLAYERMENU_TXT
dc.l SLAVEPLAYERMENU_OPTS
;6
dc.l CONTROL_TXT
dc.l CONTROL_OPTS
;7
dc.l PROTMENU_TXT
dc.l CONTROL_OPTS
ASKFORDISK_TXT:
; 0123456789012345678901234567890123456789
dc.b ' ' ;0
dc.b ' ' ;1
dc.b ' ' ;2
dc.b ' ' ;3
dc.b ' ' ;4
dc.b ' ' ;5
dc.b ' ' ;6
dc.b ' ' ;7
dc.b ' ' ;8
dc.b ' ' ;9
dc.b ' ' ;0
dc.b ' ' ;1
dc.b ' ' ;2
dc.b ' INSERT LEVEL DISK ' ;3
dc.b ' ' ;4
dc.b ' PRESS MOUSE BUTTON ' ;5
dc.b ' WHEN DISK ACTIVITY ' ;6
dc.b ' FINISHES ' ;7
dc.b ' ' ;8
dc.b ' ' ;9
dc.b ' ' ;0
dc.b ' ' ;1
dc.b ' ' ;2
dc.b ' ' ;3
dc.b ' ' ;4
dc.b ' ' ;5
dc.b ' ' ;6
dc.b ' ' ;7
dc.b ' ' ;8
dc.b ' ' ;9
dc.b ' ' ;0
dc.b ' ' ;1
ASKFORDISK_OPTS:
dc.w -1
ONEPLAYERMENU_TXT:
; 0123456789012345678901234567890123456789
dc.b ' ' ;0
dc.b ' ' ;1
dc.b ' ' ;2
dc.b ' ' ;3
dc.b ' ' ;4
dc.b ' ' ;5
dc.b ' ' ;6
dc.b ' ' ;7
dc.b ' ' ;8
dc.b ' ' ;9
dc.b ' ' ;0
CURRENTLEVELLINE:
dc.b ' LEVEL 1 : THE GATE ' ;1
dc.b ' ' ;2
dc.b ' 1 PLAYER ' ;3
dc.b ' ' ;4
dc.b ' PLAY GAME ' ;5
dc.b ' ' ;6
dc.b ' CONTROL OPTIONS ' ;7
dc.b ' ' ;8
dc.b ' GAME CREDITS ' ;9
dc.b ' ' ;0
dc.b ' PASSWORD ' ;1
dc.b ' ' ;2
PASSWORDLINE:
dc.b ' ' ;3
dc.b ' ' ;4
dc.b ' ' ;5
dc.b ' ' ;6
dc.b ' ' ;7
dc.b ' ' ;8
dc.b ' ' ;9
dc.b ' ' ;0
dc.b ' ' ;1
ONEPLAYERMENU_OPTS:
dc.w 16,13,8,1
dc.w 15,15,10,1
dc.w 12,17,16,1
dc.w 14,19,12,1
dc.w 12,23,16,1
dc.w -1
MASTERPLAYERMENU_TXT:
; 0123456789012345678901234567890123456789
dc.b ' ' ;0
dc.b ' ' ;1
dc.b ' ' ;2
dc.b ' ' ;3
dc.b ' ' ;4
dc.b ' ' ;5
dc.b ' ' ;6
dc.b ' ' ;7
dc.b ' ' ;8
dc.b ' ' ;9
dc.b ' ' ;0
dc.b ' ' ;1
dc.b ' 2 PLAYER MASTER ' ;2
dc.b ' ' ;3
CURRENTLEVELLINEM:
dc.b ' LEVEL 1 : THE GATE ' ;4
dc.b ' ' ;5
dc.b ' PLAY GAME ' ;6
dc.b ' ' ;7
dc.b ' CONTROL OPTIONS ' ;8
dc.b ' ' ;9
dc.b ' ' ;0
dc.b ' ' ;1
dc.b ' ' ;2
dc.b ' ' ;3
dc.b ' ' ;4
dc.b ' ' ;5
dc.b ' ' ;6
dc.b ' ' ;7
dc.b ' ' ;8
dc.b ' ' ;9
dc.b ' ' ;0
dc.b ' ' ;1
MASTERPLAYERMENU_OPTS:
dc.w 12,12,16,1
dc.w 7,14,26,1
dc.w 15,16,10,1
dc.w 12,18,16,1
dc.w -1
SLAVEPLAYERMENU_TXT:
; 0123456789012345678901234567890123456789
dc.b ' ' ;0
dc.b ' ' ;1
dc.b ' ' ;2
dc.b ' ' ;3
dc.b ' ' ;4
dc.b ' ' ;5
dc.b ' ' ;6
dc.b ' ' ;7
dc.b ' ' ;8
dc.b ' ' ;9
dc.b ' ' ;9
dc.b ' ' ;1
dc.b ' 2 PLAYER SLAVE ' ;4
dc.b ' ' ;3
dc.b ' PLAY GAME ' ;2
dc.b ' ' ;5
dc.b ' CONTROL OPTIONS ' ;0
dc.b ' ' ;1
dc.b ' ' ;3
dc.b ' ' ;7
dc.b ' ' ;7
dc.b ' ' ;3
dc.b ' ' ;3
dc.b ' ' ;3
dc.b ' ' ;4
dc.b ' ' ;5
dc.b ' ' ;6
dc.b ' ' ;7
dc.b ' ' ;9
dc.b ' ' ;9
dc.b ' ' ;9
dc.b ' ' ;9
PROTMENU_TXT:
; 0123456789012345678901234567890123456789
dc.b ' ' ;0
dc.b ' ' ;1
dc.b ' ' ;2
dc.b ' ' ;3
dc.b ' ' ;4
dc.b ' ' ;5
dc.b ' ' ;6
dc.b ' ' ;7
dc.b ' ' ;8
dc.b ' ' ;9
dc.b ' ' ;0
dc.b ' ' ;1
dc.b ' TYPE IN THREE DIGIT CODE FROM MANUAL : ' ;2
dc.b ' ' ;3
PROTLINE:
dc.b ' TABLE 00 ROW 00 COLUMN 00 ' ;4
dc.b ' ' ;5
dc.b ' ' ;6
dc.b ' ' ;7
dc.b ' ' ;8
dc.b ' ' ;9
dc.b ' ' ;0
dc.b ' ' ;1
dc.b ' ' ;2
dc.b ' ' ;3
dc.b ' ' ;4
dc.b ' ' ;5
dc.b ' ' ;6
dc.b ' ' ;7
dc.b ' ' ;9
dc.b ' ' ;0
dc.b ' ' ;1
SLAVEPLAYERMENU_OPTS:
dc.w 12,12,16,1
dc.w 15,14,10,1
dc.w 12,16,16,1
dc.w -1
PLAYER_OPTS:
; 0123456789012345678901234567890123456789
dc.b ' 1 PLAYER '
dc.b ' 2 PLAYER MASTER '
dc.b ' 2 PLAYER SLAVE '
LEVEL_OPTS:
; 0123456789012345678901234567890123456789
dc.b ' LEVEL 1 : THE GATE '
dc.b ' LEVEL 2 : STORAGE BAY '
dc.b ' LEVEL 3 : SEWER NETWORK '
dc.b ' LEVEL 4 : COURTYARD A '
dc.b ' LEVEL 5 : SYSTEM PURGE '
dc.b ' LEVEL 6 : THE MINES '
dc.b ' LEVEL 7 : THE FURNACE '
dc.b ' LEVEL 8 : TEST ARENA GAMMA '
dc.b ' LEVEL 9 : SURFACE ZONE '
dc.b ' LEVEL 10 : TRAINING AREA '
dc.b ' LEVEL 11 : ADMIN BLOCK '
dc.b ' LEVEL 12 : THE PIT '
dc.b ' LEVEL 13 : STRATA '
dc.b ' LEVEL 14 : REACTOR CORE '
dc.b ' LEVEL 15 : COOLING TOWER ONE '
dc.b ' LEVEL 16 : COMMAND CENTRE '
CONTROL_TXT:
; 0123456789012345678901234567890123456789
dc.b ' ' ;0
dc.b ' ' ;1
dc.b ' ' ;2
dc.b ' ' ;3
dc.b ' DEFINE CONTROLS ' ;4
dc.b ' ' ;5
KEY_LINES:
dc.b ' TURN LEFT LCK ' ;6
dc.b ' TURN RIGHT RCK ' ;7
dc.b ' FORWARDS UCK ' ;8
dc.b ' BACKWARDS DCK ' ;9
dc.b ' FIRE RAL ' ;0
dc.b ' OPERATE DOOR/LIFT/SWITCH SPC ' ;1
dc.b ' RUN RSH ' ;2
dc.b ' FORCE SIDESTEP RAM ' ;3
dc.b ' SIDESTEP LEFT . ' ;4
dc.b ' SIDESTEP RIGHT / ' ;5
dc.b ' DUCK D ' ;6
dc.b ' LOOK BEHIND L ' ;7
dc.b ' ' ;8
dc.b ' OTHER CONTROLS ' ;9
dc.b ' ' ;0
dc.b ' PULSE RIFLE 1 PAUSE P ' ;1
dc.b ' SHOTGUN 2 QUIT ESC ' ;2
dc.b ' PLASMA GUN 3 MOUSE CONTROL M ' ;3
dc.b ' GRENADE LAUNCHER 4 JOYSTICK CONTROL J ' ;4
dc.b ' ROCKET LAUNCHER 5 KEYBOARD CONTROL K ' ;5
dc.b ' ' ;6
dc.b ' MAIN MENU ' ;7
dc.b ' ' ;8
dc.b ' ' ;9
dc.b ' ' ;0
dc.b ' ' ;1
CONTROL_OPTS:
dc.w 5,6,30,1
dc.w 5,7,30,1
dc.w 5,8,30,1
dc.w 5,9,30,1
dc.w 5,10,30,1
dc.w 5,11,30,1
dc.w 5,12,30,1
dc.w 5,13,30,1
dc.w 5,14,30,1
dc.w 5,15,30,1
dc.w 5,16,30,1
dc.w 5,17,30,1
dc.w 15,27,10,1
dc.w -1
PLOPT: dc.w 0
INSTRUCTIONS_TXT:
; 0123456789012345678901234567890123456789
dc.b 'Main controls: ' ;1
dc.b ' ' ;2
dc.b 'Curs Keys = Forward / Backward ' ;3
dc.b ' Turn left / right ' ;4
dc.b ' Right Alt = Fire ' ;5
dc.b ' Right Shift = Run ' ;6
dc.b ' > = Slide Left ' ;7
dc.b ' ? = Slide Right ' ;8
dc.b ' SPACE = Operate Door/Lift ' ;9
dc.b ' D = Duck ' ;0
dc.b ' J = Joystick Control ' ;1
dc.b ' K = Keyboard Control ' ;2
dc.b ' ' ;3
dc.b ' 1,2,3 = Select weapon ' ;4
dc.b ' ENTER = Toggle screen size' ;5
dc.b ' ESC = Quit ' ;6
dc.b ' ' ;7
dc.b ' ' ;8
dc.b 'The one player game has no objective and' ;9
dc.b 'the only way to finish is to die or quit' ;0
dc.b ' ' ;1
dc.b 'The two-player game is supposed to be a ' ;2
dc.b 'fight to the death but will probably be ' ;3
dc.b 'a fight-till-we-find-the-rocket-launcher' ;4
dc.b 'then-blow-ourselves-up type game. ' ;5
dc.b ' ' ;6
dc.b 'LOOK OUT FOR TELEPORTERS: They usually ' ;7
dc.b 'have glowing red walls and overhead ' ;8
dc.b 'lights. Useful for getting behind your ' ;9
dc.b ' opponent! ' ;0
dc.b ' Just a taster of what is to come.... ' ;1
dc.b ' ' ;0
INSTRUCTIONS_OPTS:
dc.w 0,0,0,1
dc.w -1
CREDITMENU_TXT:
; 0123456789012345678901234567890123456789
dc.b ' ' ;7
dc.b ' ' ;7
dc.b ' Main Game Code: ' ;0
dc.b ' by ' ;1
dc.b ' Andrew Clitheroe ' ;2
dc.b ' ' ;3
dc.b ' Serial Link and 3D Object Editor: ' ;4
dc.b ' by ' ;5
dc.b ' Charles Blessing ' ;6
dc.b ' ' ;7
dc.b ' Graphics: ' ;8
dc.b ' by ' ;9
dc.b ' Mike Oakley ' ;0
dc.b ' ' ;1
dc.b ' Title Picture ' ;2
dc.b ' by ' ;3
dc.b ' Mike Green ' ;4
dc.b ' ' ;5
dc.b ' Inspiration, incentive, moral support, ' ;6
dc.b ' level design and plenty of tea ' ;7
dc.b ' generously supplied by ' ;8
dc.b ' ' ;9
dc.b ' Jackie Lang ' ;0
dc.b ' ' ;1
dc.b ' Music for the last demo composed ' ;2
dc.b ' by the inexpressibly evil: ' ;3
dc.b ' ' ;8
dc.b ' *BAD* BEN CHANTER ' ;9
dc.b ' ' ;0
dc.b ' Sadly no room for music this time ' ;1
dc.b ' ' ;7
dc.b ' ' ;7
CREDITMENU_OPTS:
dc.w 0,0,1,1
dc.w -1
; 0123456789012345678901234567890123456789
dc.b ' ' ;0
dc.b ' ' ;1
dc.b ' ' ;2
dc.b ' ' ;3
dc.b ' ' ;4
dc.b ' ' ;5
dc.b ' ' ;6
dc.b ' ' ;7
dc.b ' ' ;8
dc.b ' ' ;9
dc.b ' ' ;0
dc.b ' ' ;1
dc.b ' ' ;2
dc.b ' ' ;3
dc.b ' ' ;4
dc.b ' ' ;5
dc.b ' ' ;6
dc.b ' ' ;7
dc.b ' ' ;8
dc.b ' ' ;9
dc.b ' ' ;0
dc.b ' ' ;1
dc.b ' ' ;2
dc.b ' ' ;3
dc.b ' ' ;4
dc.b ' ' ;5
dc.b ' ' ;6
dc.b ' ' ;7
dc.b ' ' ;8
dc.b ' ' ;9
dc.b ' ' ;0
dc.b ' ' ;1
********************************************************
PUTIN32:
move.w #31,d2
p32loop:
moveq #0,d5
move.l (a0)+,d3
move.w d3,d4
swap d3
move.b d4,d5
lsr.w #8,d4
muls d0,d3
muls d0,d4
muls d0,d5
lsr.l #8,d3
lsr.l #8,d4
lsr.l #8,d5
move.w d3,d6
swap d3
move.w d6,d3
move.w d4,d6
swap d4
move.w d6,d4
move.w d5,d6
swap d5
move.w d6,d5
and.w #%11110000,d3
and.w #%11110000,d4
and.w #%11110000,d5
lsl.w #4,d3
add.w d4,d3
lsr.w #4,d5
add.w d5,d3
move.w d3,2(a1)
swap d3
swap d4
swap d5
and.w #%1111,d3
and.w #%1111,d4
and.w #%1111,d5
lsl.w #8,d3
lsl.w #4,d4
add.w d4,d3
add.w d5,d3
move.w d3,2+(132*4)(a1)
addq #4,a1
dbra d2,p32loop
rts
**************************************
FADEAMOUNT: dc.w 0
FADEVAL: dc.w 0
FADEUPTITLE:
move.w FADEVAL,d0
move.w FADEAMOUNT,d1
fadeuploop:
move.l #TITLEPAL,a0
move.l #TITLEPALCOP,a1
wvb:
btst #5,$dff000+intreqrl
beq.s wvb
move.w #$20,$dff000+intreq
bsr PUTIN32
add.w #4,a1
bsr PUTIN32
add.w #4,a1
bsr PUTIN32
add.w #4,a1
bsr PUTIN32
addq.w #4,d0
dbra d1,fadeuploop
subq #4,d0
move.w d0,FADEVAL
rts
CLEARTITLEPAL:
PRSDP
move.l #TITLEPALCOP,a0
move.w #7,d1
clrpal:
move.w #31,d0
clr32
move.w #0,2(a0)
addq #4,a0
dbra d0,clr32
addq #4,a0
dbra d1,clrpal
PRSDQ
rts
FADEDOWNTITLE:
move.w FADEVAL,d0
move.w FADEAMOUNT,d1
fadedownloop:
move.l #TITLEPAL,a0
move.l #TITLEPALCOP,a1
.wvb:
btst #5,$dff000+intreqrl
beq.s .wvb
move.w #$20,$dff000+intreq
bsr PUTIN32
add.w #4,a1
bsr PUTIN32
add.w #4,a1
bsr PUTIN32
add.w #4,a1
bsr PUTIN32
subq.w #4,d0
dbra d1,fadedownloop
addq #4,d0
move.w d0,FADEVAL
rts
GETTITLEMEM:
move.l #2,d1
move.l #10240*7,d0
move.l 4.w,a6
jsr -198(a6)
move.l d0,TITLESCRNADDR
move.l #$dff000-$2cdfe4,a4
move.l #2,d1
move.l #258*16*5,d0
move.l 4.w,a6
jsr -198(a6)
move.l d0,OPTSPRADDR
rts
PROTSETUP:
incbin "ab3:includes/protsetupenc"
; Need to: Decode protection calling
; routine
; use null values to call it and erase
; it from memory
; erase this routine and return.
; include "ab3:source/protsetup"
RELEASETITLEMEM:
move.l TITLESCRNADDR,d1
move.l d1,a1
move.l #10240*7,d0
move.l 4.w,a6
jsr -210(a6)
move.l OPTSPRADDR,d1
move.l d1,a1
move.l #258*80,d0
move.l 4.w,a6
jsr -210(a6)
rts
PROTCALLENC:
incbin "ab3:source/protcallenc.bin
; one pass, all instructions executed.
; must call protection routine,store
; value somewhere, call ask routine,
; compare returned value, if correct
; set up all values, then return.
; include "ab3:source/protcallenc"
ENDPROT:
LOADTITLESCRN:
move.l #TITLESCRNNAME,d1
move.l #1005,d2
move.l doslib,a6
jsr -30(a6)
move.l d0,handle
move.l d0,d1
move.l doslib,a6
move.l TITLESCRNADDR,d2
move.l #10240*7,d3
jsr -42(a6)
move.l doslib,a6
move.l handle,d1
jsr -36(a6)
rts
RVAL2: dc.w 0
SETUPTITLESCRN:
PRSDR
move.l #OPTCOP,a0
move.l #rain,a1
move.w #255,d0
putinrain:
move.w (a1)+,d1
move.w d1,6(a0)
move.w d1,6+4(a0)
move.w d1,6+8(a0)
move.w d1,6+12(a0)
add.w #4*14,a0
dbra d0,putinrain
; Put addr into copper.
move.l OPTSPRADDR,d0
move.w d0,tsp0l
swap d0
move.w d0,tsp0h
swap d0
add.l #258*16,d0
move.w d0,tsp1l
swap d0
move.w d0,tsp1h
swap d0
add.l #258*16,d0
move.w d0,tsp2l
swap d0
move.w d0,tsp2h
swap d0
add.l #258*16,d0
move.w d0,tsp3l
swap d0
move.w d0,tsp3h
swap d0
add.l #258*16,d0
move.w d0,tsp4l
swap d0
move.w d0,tsp4h
move.l #nullspr,d0
move.w d0,tsp5l
move.w d0,tsp6l
move.w d0,tsp7l
swap d0
move.w d0,tsp5h
move.w d0,tsp6h
move.w d0,tsp7h
move.l TITLESCRNADDR,d0
move.w d0,ts1l
swap d0
move.w d0,ts1h
swap d0
add.l #10240,d0
move.w d0,ts2l
swap d0
move.w d0,ts2h
swap d0
add.l #10240,d0
move.w d0,ts3l
swap d0
move.w d0,ts3h
swap d0
add.l #10240,d0
move.w d0,ts4l
swap d0
move.w d0,ts4h
swap d0
add.l #10240,d0
move.w d0,ts5l
swap d0
move.w d0,ts5h
swap d0
add.l #10240,d0
move.w d0,ts6l
swap d0
move.w d0,ts6h
swap d0
add.l #10240,d0
move.w d0,ts7l
swap d0
move.w d0,ts7h
rts
RVAL1: dc.w 0
DummyAdds:
dc.l dummy-78935450
dc.l dummy-78935450
dc.l dummy-78935450
dc.l dummy-78935450
dc.l dummy-78935450
dc.l dummy-78935450
dc.l dummy-78935450
dc.l dummy-78935450
dc.l dummy-78935450
dc.l dummy-78935450
dummycall
dc.w $4e75-123
protspace: ds.l 200
font:
incbin "OptFont"
rain: incbin "optcop"